using System;
using System.Collections.Generic;
using System.Text;
using NEXServicio;
using System.Data;

namespace NEXEntidad
{
    #region Usuario

    public class Usuario : NEXEntidad.NEXEntidadElemento
    {
        #region Constructores
        public Usuario()
            : base()
        { }
        public Usuario(String alias, String password)
            : base()
        {
            this.Alias = alias;
            this.Password = password;
        }
        #endregion

        #region Campos/Propiedades
        private String fNombre;

        public String Nombre
        {
            get { return fNombre; }
            set { fNombre = value; }
        }
        private String fApellido;

        public String Apellido
        {
            get { return fApellido; }
            set { fApellido = value; }
        }
        private DateTime fFechaNacimiento;

        public DateTime FechaNacimiento
        {
            get { return fFechaNacimiento; }
            set { fFechaNacimiento = value; }
        }
        private String fAlias;

        public String Alias
        {
            get { return fAlias; }
            set { fAlias = value; }
        }
        private String fPassword;

        public String Password
        {
            get { return fPassword; }
            set { fPassword = value; }
        }

        private String fEmail;

        public String Email
        {
            get { return fEmail; }
            set { fEmail = value; }
        }
        private Pais fPaisNacimiento;

        public Pais PaisNacimiento
        {
            get { return fPaisNacimiento; }
            set { fPaisNacimiento = value; }
        }
        private char fSexo;

        public char Sexo
        {
            get { return fSexo; }
            set { fSexo = value; }
        }

        private bool fEsAdministrador;

        public bool EsAdministrador
        {
            get { return fEsAdministrador; }
            set { fEsAdministrador = value; }
        }

        private LibroCollection fBiblioteca;

        public LibroCollection Biblioteca
        {
            get { return fBiblioteca; }
            set { fBiblioteca = value; }
        }


        #endregion

        #region Metodos Publicos
        public Boolean LoguearUsuario()
        {
            try
            {
                this.Obtener();
                return this.Id != 0 ? true : false;

            }
            catch (NEXEntidad.ObjetoInexistenteException)
            {
                return false;
            }
            catch (Exception ex)
            {
                throw;
            }
        }

        public void CargarBiblioteca()
        {
            try
            {
                
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        #endregion

        #region Metodos de carga
        protected override void Obtener()
        {
            using (DataSet ds = ServicioUsuario.Obtener(this.Alias, this.Password))
            {
                DataTable dtUsuario = ds.Tables[ServicioUsuario.DataTableName];
                if (dtUsuario.Rows.Count > 0)
                {
                    DataRow drUsuario = dtUsuario.Rows[0];
                    Usuario.Cargar(this, drUsuario, false);
                }
                else
                {
                    throw new ObjetoInexistenteException("Usuario");
                }
            }
        }
        internal static Usuario CrearCargadoCompleto(System.Data.DataRow drUsuario, Boolean dataRowSolapado)
        {
            String nombreSolapado = !dataRowSolapado ? "" : "Usuario_";
            Usuario usuario = new Usuario();
            Usuario.Cargar(usuario, drUsuario, dataRowSolapado);
            return usuario;
        }
        private static void Cargar(Usuario usuario, DataRow drUsuario, Boolean dataRowSolapado)
        {
            String nombreSolapado = !dataRowSolapado ? "" : "Usuario_";
            usuario.Id = Convert.ToInt32(drUsuario[nombreSolapado + "IdUsuario"].ToString(), System.Globalization.CultureInfo.CurrentCulture);
            usuario.Nombre = drUsuario[nombreSolapado + "Nombre"].ToString();
            usuario.Apellido = drUsuario[nombreSolapado + "Apellido"].ToString();
            usuario.EsAdministrador = drUsuario[nombreSolapado + "EsAdministrador"] == DBNull.Value ? false : Convert.ToBoolean(drUsuario[nombreSolapado + "EsAdministrador"]);
            usuario.Alias = drUsuario[nombreSolapado + "Alias"].ToString();
            usuario.Sexo = Convert.ToChar(drUsuario[nombreSolapado + "Sexo"].ToString());
            /*** FALTA CARGAR LAS OTRAS PROPIEDADES ***/
            usuario.ObjetoCargado();
        }
        #endregion

    }

    #endregion

}
